﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Dominio;
using Persistencia;

namespace PersistenciaImplementacion
{
    class BrokerCliente : Broker
    {
        public override string GetSQLCreate()
        {
            return "INSERT INTO Cliente (nombre, matricula, marca, modelo) VALUES (@nombre, @matricula, @marca, @modelo)SELECT SCOPE_IDENTITY()";
        }

        public override string GetSQLDelete()
        {
            return "DELETE FROM Cliente where idCliente = @idCliente";
        }

        public override string GetSQLUpdate()
        {
            return "UPDATE Cliente SET nombre = @nombre WHERE idCliente = @idCliente";
        }

        public override string GetSQLSelect()
        {
            return "SELECT * FROM Cliente";
        }

        public override void LoadReferences(SqlCommand comando, ObjetoPersistible obj)
        {
            SqlParameter nombre = new SqlParameter("@nombre", (obj as Cliente).GetNombre());
            SqlParameter matricula = new SqlParameter("@matricula", (obj as Cliente).ObtenerAuto().matricula);
            SqlParameter marca = new SqlParameter("@marca", (obj as Cliente).ObtenerAuto().marca);
            SqlParameter modelo = new SqlParameter("@modelo", (obj as Cliente).ObtenerAuto().modelo);
            comando.Parameters.Add(nombre);
            comando.Parameters.Add(matricula);
            comando.Parameters.Add(marca);
            comando.Parameters.Add(modelo);
        }

        public override ObjetoPersistible ReaderToObject(System.Data.Common.DbDataReader reader)
        {
            Cliente cli = new Cliente();
            cli.idCliente = Int32.Parse(reader["idCliente"].ToString());
            cli.nombre = reader["nombre"].ToString();
            Sistema.GetSistema().AgregarCliente(cli);

            //Creo los autos de los clientes
            Vehiculo vehi = new Vehiculo();
            vehi.idCliente = cli.idCliente;
            vehi.marca = reader["marca"].ToString();
            vehi.modelo = reader["modelo"].ToString();
            vehi.matricula = reader["matricula"].ToString();
            cli.AgregarAuto(vehi);

            return cli;
        }

        public override string InsertarHijos(object objeto, ObjetoPersistible obj)
        {
            Cliente cli = (Cliente)obj;
            cli.idCliente = Int32.Parse(objeto.ToString());
            return null;
        }

        public override void LoadReferencesWhere(SqlCommand comando, ObjetoPersistible obj)
        {
            SqlParameter idCliente = new SqlParameter("@idCliente", (obj as Cliente).idCliente);
            SqlParameter nombre = new SqlParameter("@nombre", (obj as Cliente).nombre);
            comando.Parameters.Add(idCliente);
            comando.Parameters.Add(nombre);
        }
    }
}
